package com.admin.web;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.admin.service.AdminCTSService;
import com.admin.service.AdminSchoolService;
import com.common.model.AdminUser;
import com.common.model.BaseUser;
import com.common.model.ClassInfo;
import com.common.model.Department;
import com.common.model.ProfBranch;
import com.common.model.Profession;

@Controller
@RequestMapping("/admin/class")
public class AdminClassWeb {
	@Autowired
	AdminSchoolService schooService;
	@Autowired
	AdminCTSService ctsService;
	/**
	 * 根据条件查询班级
	 * @param clgId 学院id
	 * @param page 页码(从1开始)
	 * @return
	 */
	@RequestMapping("/showClassList/{clg_id}/{page}")
	public ModelAndView showClass(
			@PathVariable("clg_id") int clgId,
			@PathVariable("page")int page){
		ModelAndView mav=new ModelAndView();
		mav.setViewName("admin/cts/showClass");
		mav.addObject("colleges", schooService.getAllCollege());
		int minClgId=schooService.getMinCollegeId();
		if(minClgId>clgId){
			clgId=minClgId;
		}
		mav.addObject("clgId", clgId);
		int classCount=ctsService.getClassesCountByClgId(clgId);
		int totalPage=(int)Math.ceil(classCount/10.0);
		if(totalPage==0){
			totalPage=1;
		}
		if(page>totalPage){
			page=totalPage;
		}
		mav.addObject("page", page);
		mav.addObject("classList", ctsService.getClassesByClgId(clgId, page));
		mav.addObject("classCount",classCount );
		mav.addObject("totalPage",totalPage);
		mav.addObject("currentMenu", "showClassList");
		return mav;
	}
	/**
	 * 通过班级id获取班级
	 * @param classId
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/getClass/{class_id}")
	public ClassInfo getClassByClassId(@PathVariable("class_id")int classId){
		return ctsService.getClassByClassId(classId);
	}
	/**
	 * 通过系获取下面的所有班级
	 * @param depId
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/getClassesByDep/{dep_id}")
	public ArrayList<ClassInfo> getClassesByDepId(@PathVariable("dep_id")int depId){
		return ctsService.getClassesByDepId(depId);
	}
	/**
	 * 修改一个班级
	 * @param classinfo
	 * @return  -1,-2 权限不足-3 参数错误 -4重复no -5重复name-6 参数错误2
	 */
	@ResponseBody
	@RequestMapping("/updateClass")
	public int updateClass(ClassInfo classinfo,HttpSession session){
		if(classinfo.getId()==null||classinfo.getProf_id()==null||classinfo.getName()==null||classinfo.getName().trim().isEmpty()||classinfo.getNo()==null||classinfo.getNo().trim().isEmpty()){
			return -3;
		}
		AdminUser admin=(AdminUser) session.getAttribute("user");
		//检查正在操作的用户是否为超级管理员
		if(!admin.isSuperAdmin()){
			//如果不是超级管理员,检查正在操作的系是否为本学院的
			int orgCollegeId=ctsService.getClassByClassId(classinfo.getId()).getBranch().getProf().getDepartment().getCollege().getId();
			if(admin.getCollegeId()!=orgCollegeId){
				return -1;//操作之前不是本学院的
			}
			int newCollegeId=schooService.getProBranchByPbId(classinfo.getProf_id()).getProf().getDepartment().getCollege().getId();
			if(admin.getCollegeId()!=newCollegeId){
				return -2;//操作之后不是本学院的
			}
		}
		ClassInfo classNoCheck=ctsService.getClassByClassNo(classinfo.getNo());
		if(classNoCheck!=null&&classNoCheck.getId()!=classinfo.getId()){
			return -4;//重复no;
		}
		ClassInfo classNameCheck=ctsService.getClassByClassName(classinfo.getName());
		if(classNameCheck!=null&&classNameCheck.getId()!=classinfo.getId()){
			return -5;//重复name;
		}
		classinfo.setName(classinfo.getName().trim());
		classinfo.setNo(classinfo.getNo().trim());
		try {
			ctsService.updateClass(classinfo);
		} catch (Exception e) {
			return -6;//参数错误2
		}
		return 0;
	}
	
	/**
	 * 删除一个班级
	 * @param classId
	 * @return -1 无权限 -2还有学生存在
	 */
	@ResponseBody
	@RequestMapping("/deleteClass/{class_id}")
	public int deleteClass(@PathVariable("class_id") int classId, HttpSession session) {
		AdminUser admin = (AdminUser) session.getAttribute("user");
		// 检查正在操作的用户是否为超级管理员
		if (!admin.isSuperAdmin()) {
			// 如果不是超级管理员,检查正在操作的系是否为本学院的
			int orgCollegeId=ctsService.getClassByClassId(classId).getBranch().getProf().getDepartment().getCollege().getId();
			if (admin.getCollegeId() != orgCollegeId) {
				return -1;// 操作之前不是本学院的
			}
		}
		int result =ctsService.deleteClass(classId);
		if (result == 0) {
			return 0;
		}
		return result - 1;
	}
	/**
	 * 添加一个班级
	 * @param classinfo
	 * @return -1无权限  -2 参数错误 -3重复no -4 重复name
	 */
	@ResponseBody
	@RequestMapping("/insertClass")
	public int insertClass(ClassInfo classinfo,HttpSession session){
		if(classinfo.getName()==null||classinfo.getName().trim().isEmpty()||classinfo.getNo()==null||classinfo.getNo().trim().isEmpty()||classinfo.getProf_id()==null){
			return -2;//参数错误
		}
		AdminUser admin=(AdminUser) session.getAttribute("user");
		//检查正在操作的用户是否为超级管理员
		if(!admin.isSuperAdmin()){
			//如果不是超级管理员,检查添加的班级是否为本学院的
			int newCollegeId=schooService.getProBranchByPbId(classinfo.getProf_id()).getProf().getDepartment().getCollege().getId();
			if(admin.getCollegeId()!=newCollegeId){
				return -1;//添加的班级不属于本学院
			}
		}
		classinfo.setName(classinfo.getName().trim());
		classinfo.setNo(classinfo.getNo().trim());
		int result=ctsService.insertClass(classinfo);
		if(result==-1){
			return -3;//已存在同样no的班级
		}
		if(result==-2){
			return -4;//已存在同样name的班级
		}
		if(result==-3){
			return -5;//参数错误2
		}
		return 0;
	}
	/**
	 * 添加一个班级
	 * @param classinfo
	 * @return -1无权限  -2 参数错误 重复no
	 */
	@ResponseBody
	@RequestMapping("/insertClassBulk")
	public int insertClassBulk(ClassInfo classinfo,int count,HttpSession session){
		if(classinfo.getName()==null||classinfo.getName().trim().isEmpty()||classinfo.getNo()==null||classinfo.getNo().trim().isEmpty()||classinfo.getProf_id()==null){
			return -2;//参数错误
		}
		AdminUser admin=(AdminUser) session.getAttribute("user");
		//检查正在操作的用户是否为超级管理员
		if(!admin.isSuperAdmin()){
			//如果不是超级管理员,检查添加的班级是否为本学院的
			int newCollegeId=schooService.getProBranchByPbId(classinfo.getProf_id()).getProf().getDepartment().getCollege().getId();
			if(admin.getCollegeId()!=newCollegeId){
				return -1;//添加的班级不属于本学院
			}
		}
		classinfo.setName(classinfo.getName().trim());
		classinfo.setNo(classinfo.getNo().trim());
		ctsService.insertClassBulk(classinfo, count);
		return 0;
	}
}
